package dao;

import entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

/**
 * @Author:石小俊
 * @Date:2022/12/30 11:17
 * @Version:1.0-SNAPSHOT
 * @Description:
 */
public interface IUserDao {

    // @Insert、@Delete、@Update、@Select分别用于实现增删改查操作
    // value属性:当前操作的sql语句,当注册有且仅有value属性时,value可以省略
        // sql语句块内容与配置文件版的标签体内容完全一致
//    @Insert(value = "")
    @Insert("insert into t_user (username,password,phone,address) values(#{username},#{password},#{phone},#{address})")
    public void insertUser(User user);

    @Select("select id,username,password,phone,address from t_user where id = #{id}")
    public User selectById(Integer id);

    // 默认情况下,对于返回值使用的是resultType的配置
    // 即:自动映射
    // 可以使用别名进行强行一致
    @Select("select user_id 'id',user_username 'username',user_password 'password',user_phone 'phone',user_address 'address' from t_user2 where user_id = #{id}")
    public User selectById2(Integer id);

    // 可以通过手动映射来实现
    // 在注解方式中,可以通过@Results进行resultMap的配置
    // 该注解的value属性用于配置字段名与属性名的映射
    // 其值是一个数组,数组中的每一个元素表示一个字段的映射
    // 每一个元素使用@Result注解所表示
    // 该注解的属性与resultMap标签中子标签的属性基本一致
    // 相比而言,会多一个id属性
        // id:其值是一个布尔类型,表示当前字段是否是主键字段,默认值为false
    @Select("select user_id,user_username,user_password,user_phone,user_address from t_user2 where user_id = #{id}")
    @Results(value = {
            @Result(id = true,column = "user_id",property = "id"),
            @Result(column = "user_username",property = "username"),
            @Result(column = "user_password",property = "password"),
            @Result(column = "user_phone",property = "phone"),
            @Result(column = "user_address",property = "address")
    })
    public User selectById3(Integer id);
}
